import java.util.concurrent.CountDownLatch;

/**
 * 天然线程安全，可防止反射生成实例。
 *  优点：该类只存在一个实例，节省系统资源；对于需要频繁创建销毁的对象，使用单例模式可以提高系统性能。
 *	缺点：不能外部实例化（new），调用人员不清楚调用哪个方法获取实例时会感到迷惑，尤其当看不到源代码时。
 *
 */
public enum EnumSingleton {

    /**
     * 单实例
     */
    INSTANCE;

    public String init() {
        System.out.println("资源初始化。。。");
        return null;
    }

    public static void main(String[] args) {
        int count = 2000;
        CountDownLatch latch = new CountDownLatch(count);

        for (int i = 0; i < count; i++) {
            new Thread(() -> {
                try {
                    latch.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                EnumSingleton instance = EnumSingleton.INSTANCE;
                System.out.println(instance.init());
            }).start();
            latch.countDown();
        }
    }

}